package com.hxtec.polaris.mapper;

import com.hxtec.polaris.commons.dto.OmsOrderDeliveryParam;
import com.hxtec.polaris.entity.ShopOrder;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.MyMapper;

import java.util.Date;
import java.util.List;
import java.util.Map;

public interface ShopOrderMapper extends MyMapper<ShopOrder> {

    /**
     * 获取订单数量
     * @param userAccount
     * @param state
     * @return
     */
    Integer getOrderCount(@Param("uid") String userAccount,@Param("state") Integer state);

    /**
     * 获取订单信息
     * @param userAccount
     * @param state
     * @param start
     * @param rows
     * @return
     */
    List<Map<String,Object>> getOrder(@Param("uid") String userAccount,@Param("state") Integer state, @Param("start") Integer start, @Param("rows") Integer rows);

    /**
     * 获取一条订单对应的商品详情信息
     * @param userAccount
     * @param orderId
     * @return
     */
    List<Map<String,Object>> getOrderItemsByOneOrder(@Param("uid") String userAccount,@Param("orderId") Integer orderId);

    Map<String,Object> getPriceByOrderId(@Param("oid") int oid,@Param("uid") String userid);

    /**
     * 延时收货
     * @param id    订单id
     * @param uid   用户id
     * @param delayTime 延时时间
     * @param date 更新时间
     */
    void doExtendReceipt(@Param("oid") Integer id, @Param("uid")  String uid, @Param("delayTime")  int delayTime, @Param("updatetime") Date date);

    /**
     * 确认收货 将state改为4 已完成状态
     * @param id    订单id
     * @param s     用户id
     * @param state  收货后的订单状态 4
     * @param date  更新时间
     */
    void doConfirmReceipt(@Param("oid") Integer id, @Param("uid")  String s,@Param("state")  int state,@Param("updatetime") Date date);

    /**
     * 删除订单 将is_delete改为Y
     * @param id    订单id
     * @param uid     用户id
     * @param date  更新时间
     */
    void doDeleteOrder(@Param("oid")Integer id, @Param("uid")String uid,@Param("updatetime")Date date);

    /**
     * 取消收货 将state改为5 已关闭状态状态
     * @param id    订单id
     * @param s     用户id
     * @param state  收货后的订单状态 5
     * @param date  更新时间
     */
    void doCancelOrder(@Param("oid") Integer id, @Param("uid")  String s,@Param("state")  int state,@Param("updatetime") Date date);

    /**
     * 执行订单评价 将state改为已完成 4
     * @param id    订单id
     * @param uid    用户id
     * @param state  收货后的订单状态 4
     * @param date  更新时间
     */
    void doRateOrder(@Param("oid") int id, @Param("uid")String uid, @Param("state")int state,@Param("updatetime") Date date);

    /**
     * 执行订单自动关闭 将state改为已关闭5
     * @param date
     * @return
     */
    Integer doAutoCloseOrder(@Param("date") Date date);

    /**
     * OMS MANAGER START >>>>>>>>>>
     */

    /**
     * 后台管理员获取订单数据 count
     * @param orderSn
     * @param receiverKeyword
     * @param status
     * @param createTime
     * @return
     */
    int getOrderCountMng(@Param("orderSn")String orderSn, @Param("receiverKeyword")String receiverKeyword, @Param("status")String status, @Param("time")String createTime);

    /**
     * 后台管理员获取订单数据
     * @param start
     * @param pageSize
     * @param orderSn
     * @param receiverKeyword
     * @param status
     * @param updateTime
     * @return
     */
    List<Map<String,Object>> getOrderMng(@Param("start") int start, @Param("rows")int pageSize, @Param("orderSn")String orderSn,
                                         @Param("receiverKeyword")String receiverKeyword, @Param("status")String status, @Param("time")String updateTime);

    /**
     * 根据订单id获取除商品外所有订单信息
     * @param id
     * @return
     */
    Map<String, Object> doGetDetail(int id);

    /**
     * 管理员关闭订单 订单状态为待付款 -》 已关闭
     * @param ids
     * @param date
     */
    void doCloseOrder(@Param("array")String[] ids,@Param("date")Date date);

    /**
     * 批量发货
     * @param deliveryParamList
     * @return
     */
    int delivery(@Param("list")List<OmsOrderDeliveryParam> deliveryParamList);

    /**
     * 执行修改收货人信息
     * @param id
     * @param name
     * @param phone
     * @param postcode
     * @param detail
     * @return
     */
    int doReceiverInfo(@Param("id")int id, @Param("name")String name, @Param("phone")String phone, @Param("postcode")String postcode, @Param("detail")String detail);

    /**
     * 根据订单编号获取订单信息
     * @param id
     * @return
     */
    ShopOrder getOrderById(@Param("id") int id);

    /**
     * 获取需要自动关闭的订单列表
     * @return
     */
    List<ShopOrder> selectDoAutoCloseOrder();
}